//你可能对option参数不太理解，等看完下一小段，你就能明白
const reqCommon = {
  /**
   * 发送请求之前做些什么
   * @param config axios config
   * @returns {*}
   */
  onFulfilled(config, /*option*/) {
    return config
  },
  /**
   * 请求出错时做点什么
   * @param error 错误对象
   * @returns {Promise<never>}
   */
  onRejected(error, /*option*/) {
    return Promise.reject(error)
  }
}

//响应拦截
const resCommon  ={
  onFulfilled(response, /*option*/) {
    return response
  },
  onRejected(error, /*option*/) {
    const { response, request } = error
    if (response) { //响应是否存在
      switch (response.status) {
        case 400:
          error.message = '错误请求'
          break
        case 401:
          error.message = '未授权，请重新登录'
          break
        case 403:
          error.message = '拒绝访问'
          break
        case 404:
          error.message = '请求错误,未找到该资源'
          break
        case 405:
          error.message = '请求方法未允许'
          break
        case 408:
          error.message = '请求超时'
          break
        case 500:
          error.message = '服务器端出错'
          break
        case 501:
          error.message = '网络未实现'
          break
        case 502:
          error.message = '网络错误'
          break
        case 503:
          error.message = '服务不可用'
          break
        case 504:
          error.message = '网络超时'
          break
        case 505:
          error.message = 'http版本不支持该请求'
          break
        default:
          error.message = `未知错误${error.response.status}`
      }
    }else if(request){// 响应不存在，很可能是请求都未发出
      if(!window.navigator.onLine) { //发现是断网了
        error.message = "网络未连接"
      }
    }else {
      error.message = "配置请求发生了错误"
    }
    return Promise.reject(error)
  }
}

export default {
  request: [reqCommon], // 请求拦截
  response: [resCommon] // 响应拦截
}
